package rede;

public class MLP {
	private Camada[] camadas;
	private int camadaFinal = -1;

	public MLP(int camadas) {
		this.camadas = new Camada[camadas];
	}

	public void addPrimeiraCamada(int neuronios, int conexao) {
		camadas[0] = new Camada(neuronios, conexao);
		camadaFinal = 0;
	}

	public void addCamada(int neuronios) {

		camadas[camadaFinal + 1] = new Camada(neuronios, camadas[camadaFinal].getTamanho());
		camadaFinal++;
	}

	public void frente(double[] entrada) {

		
		for (int i=0; i < camadas.length; i++) {
			camadas[i].computar(entrada);
			
			entrada = camadas[i].getSaida();
		}

	}

	public double getSaida(int neuronio) {
		return camadas[camadaFinal].getSaida(neuronio);
	}

	public int getTamanhoSaida() {
		return camadas[camadaFinal].getTamanho();
	}

	public int getVencedor() {
		int vencedor = Integer.MIN_VALUE;
		double valor = Double.MIN_VALUE;

		for (int i = 0; i < camadas[camadaFinal].getTamanho(); i++) {
			if (camadas[camadaFinal].getSaida(i) > valor) {
				vencedor = i;
				valor = camadas[camadaFinal].getSaida(i);
			}
		}

	 return vencedor;
	}

	public int getTamanho() {
		return camadas.length;
	}

	public String toString() {
		return getClass().getName() + "[" + camadas.length + "]";
	}

	final Camada getCamada(int i) {
		return camadas[i];
	}

	final Camada getCamadaFinal() {
		return camadas[camadaFinal];
	}
}
